﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TencentMapSdk.Entity;

namespace TencentMapSdk
{
    /// <summary>
    /// 静态图 API V2
    /// </summary>
    public class StaticMapApi : BaseApi
    {
        /// <summary>
        /// 静态图API，是通过构造一个HTTP协议的URL调用，获取一张地图的静态图片，可以通过参数指定地图位置、缩放级别、底图类型、叠加的覆盖物等。
        /// </summary>
        /// <param name="size">地图静态图片大小，宽*高，单位像素。 size=138*187</param>
        /// <param name="key">开发者密钥</param>
        /// <param name="center">地图视图中心点，为经纬度坐标。center=39.12,116.54</param>
        /// <param name="zoom">地图视图的级别设置，取值范围4≤zoom≤18，18级仅在maptype=roadmap时支持 zoom=10</param>
        /// <param name="bounds">
        /// 通过设置一个矩形范围来显示地图
        /// 1. 系统会自动计算合适的缩放级别，以便设置的范围完整显示在图中
        /// 2. 本参数优先级高于center+zoom的组合参数
        /// 3. 参数格式：
        /// bounds=lat,lng;lat,lng
        /// 矩形范围西南角坐标 和 东北角坐标，两坐标英文分号 " ; " 分隔， 纬度在前，经度在后，英文逗号" , " 分隔。 bounds=39.933828,116.472588;39.960675,116.497993</param>
        /// <param name="format">支持png(默认),png8,gif,jpg format=png</param>
        /// <param name="scale">是否高清，取值2为高清，取值1为普清 scale=2</param>
        /// <param name="maptype">	
        /// 底图类型,支持5种底图展示效果：
        /// 普通路网，roadmap
        /// 卫星，satellite
        /// 地形图，landform
        /// 地形叠加路网，terrain
        /// 卫星叠加路网，hybrid
        /// maptype=roadmap
        ///</param>
        /// <param name="markers">用于标注图标，详见图标(Markers)</param>
        /// <param name="labels">用于标注文本，详见文本(labels)</param>
        /// <param name="path">用于标记一条路径，详见路径(path)</param>
        /// <param name="secretKey"></param>
        public static Stream GetStaicMap(string size, string key, string center=null, string zoom = null, string bounds = null, string format = null, int scale = 2, string maptype=null, string markers = null, string labels = null, string path = null, string secretKey = null)
        {
            string query = GetRequestBuilder.Create(secretKey, "/ws/staticmap/v2")
                .WithKeyValue("size", size)
                .WithKeyValue("key", key)
                .WithKeyValue("center", center)
                .WithKeyValue("zoom", zoom)
                .WithKeyValue("bounds", bounds)
                .WithKeyValue("format", format)
                .WithKeyValue("scale", scale.ToString())
                .WithKeyValue("maptype", maptype)
                .WithKeyValue("markers", markers)
                .WithKeyValue("labels", labels)
                .WithKeyValue("path", path)
                .BuildQueryString();
            string url = host + query;
            var response= GetFile(url);
            return response;
        }
    }
}
